/* 
 * StikiWeb Wiki - a Wiki for Hierarchical Organizations
 * $Id: CreatePageAction.java,v 1.6 2006/07/19 21:07:35 biglee Exp $
 * 
 * ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is the StikiWeb Wiki.
 *
 * The Initial Developer of the Original Code is Lee Haslup (biglee@haslups.com).
 * Portions created by the Initial Developer are Copyright (C) 2004
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * ***** END LICENSE BLOCK ***** 
 */
package org.stikiweb.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.stikiweb.contentMagnager.PageManager;
import org.stikiweb.contentMagnager.PermissionManager;

/**
 * @author Allen L (BigLee) Haslup
 *
 */
public class CreatePageAction extends StikiAction {

	/* (non-Javadoc)
	 * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	public ActionForward execute(
		ActionMapping mapping,
		ActionForm form,
		HttpServletRequest req,
		HttpServletResponse resp)
		throws Exception {
		setup(req);
		PageBean pb = (PageBean) form;

		// if there is no input we don't know what page to edit so we fail.
		if (pb == null || pb.getName() == null) {
			return mapping.findForward("failure");
		}

		PageManager pm = PageManager.solo();
		String name = pb.getName();

		// if the page  exists go view it
		if (pm.pageExists(name)) {
			return new ActionForward("/viewPage.do");
		}
		
		if(name.startsWith("NullPage")) {
			return mapping.findForward("failure");
		}

		// if we don't have the permission to create the page...
		// (to create a new page we must have EXTEND or better for the parent page.)
		int permLevel =
			PermissionManager.solo().userPermLevelForParentPage(
				getUserName(req),
				name);
		if (permLevel < PermissionManager.EXTEND) {
			// ... and we are logged in, fail.
			if (this.isLoggedIn(req)) {
				return mapping.findForward("failure");
			}
			// if we are not logged in, try logging in and see if that helps.
			else {
				return goLoginFirst("createPage", "", name, req);
			}
		}
		
		// Don't allow user to create a child page if the parent page does not exist.
		if(!PageManager.solo().pageExists(PermissionManager.solo().parentOf(name))){
			return mapping.findForward("failure");
		}
		
		// Hopefully, this is enough checking.  Let the user edit the page and we'll create it when
		// he/she hits save.
		pb.setOperation("CREATE");
		return mapping.findForward("success");
	}
}
